package dao

import (
	"time"
)

// 这是 Cart 的全局公开dao对象，被service层调用!
var CartDao = cartDao{}

// 购物车商品表
// 这是 cart表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Cart struct {
	Id             int32     `json:"id" form:"id" v:"id" db:"id"`
	UserId         int32     `json:"user_id" form:"user_id" v:"user_id" db:"user_id"`                             // 用户表的用户ID
	GoodsId        int32     `json:"goods_id" form:"goods_id" v:"goods_id" db:"goods_id"`                         // 商品表的商品ID
	GoodsSn        string    `json:"goods_sn" form:"goods_sn" v:"goods_sn" db:"goods_sn"`                         // 商品编号
	GoodsName      string    `json:"goods_name" form:"goods_name" v:"goods_name" db:"goods_name"`                 // 商品名称
	ProductId      int32     `json:"product_id" form:"product_id" v:"product_id" db:"product_id"`                 // 商品货品表的货品ID
	Price          float64   `json:"price" form:"price" v:"price" db:"price"`                                     // 商品货品的价格
	Number         int16     `json:"number" form:"number" v:"number" db:"number"`                                 // 商品货品的数量
	Specifications string    `json:"specifications" form:"specifications" v:"specifications" db:"specifications"` // 商品规格值列表，采用JSON数组格式
	Checked        int8      `json:"checked" form:"checked" v:"checked" db:"checked"`                             // 购物车中商品是否选择状态
	PicUrl         string    `json:"pic_url" form:"pic_url" v:"pic_url" db:"pic_url"`                             // 商品图片或者商品货品图片
	AddTime        time.Time `json:"add_time" form:"add_time" v:"add_time" db:"add_time"`                         // 创建时间
	UpdateTime     time.Time `json:"update_time" form:"update_time" v:"update_time" db:"update_time"`             // 更新时间
	Deleted        int8      `json:"deleted" form:"deleted" v:"deleted" db:"deleted" gm:"deleted"`                // 逻辑删除

}

// 注意:这是 Cart 的私有dao对象，只能在dao层内使用!
type cartDao struct {
	InsertTemplate func(arg Cart) (int64, error)      //插入一条记录
	UpdateTemplate func(arg Cart) (int64, error)      //更新一条记录
	DeleteTemplate func(id int64) (int64, error)      `args:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Cart, error)       `args:"id"` //根据传入的主键获取一条记录
	List           func(arg CartList) ([]Cart, error) //模糊分页查询
}

/*
// 这是 cart 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type CartPostman struct {
id
user_id
goods_id
goods_sn
goods_name
product_id
price
number
specifications
checked
pic_url
add_time
update_time
deleted

}*/

// 这是 cart 表的批量请求参数
type CartReq struct {
	List []Cart `json:"list" form:"list"`
}

// 这是 cartDao.List()方法的请求参数
type CartList struct {
	Page
}
